session页面改造

chengzhenyu 8 lat temu
rodzic
commit
2a7c864737

+ 3 - 1
app/src/main/java/ai/pai/lensman/App.java

@@ -43,7 +43,7 @@ public class App extends Application{
43 43
         if(!checkUsbPermission()){
44 44
             Toast.makeText(this,"申请usb权限失败",Toast.LENGTH_SHORT).show();
45 45
         }
46
-        checkCameraLibs();
46
+//        checkCameraLibs();
47 47
         initImageLoader();
48 48
         new PatchManager().patch(this, UrlContainer.PATCH_CONFIG_URL,Constants.APP_PATCH_DIR+ File.separator+"patch-"+BuildConfig.VERSION_NAME+".dex","ai.pai.lensman.patch.PatchesInfoImpl");
49 49
         noMedia();
@@ -54,11 +54,13 @@ public class App extends Application{
54 54
         DataOutputStream os = null;
55 55
         try {
56 56
             String cmd = "chmod 777 " + getPackageCodePath();
57
+            String cmd1 = "setenforce 0";
57 58
             String cmd2 = "chmod -R 0777 /dev/bus/usb" ;
58 59
 
59 60
             process = Runtime.getRuntime().exec("su"); // 切换到root帐号
60 61
             os = new DataOutputStream(process.getOutputStream());
61 62
             os.writeBytes(cmd + "\n");
63
+            os.writeBytes(cmd1 + "\n");
62 64
             os.writeBytes(cmd2 + "\n");
63 65
             os.writeBytes("exit\n");
64 66
             os.flush();

+ 0 - 3
app/src/main/java/ai/pai/lensman/dslr/CameraJNIInterface.java

@@ -24,8 +24,5 @@ public class CameraJNIInterface {
24 24
     public native  int  mygpcameraexit();
25 25
     public native  String  mygpcameragetsummary();
26 26
     public native  String  mygpcamerawaitforevent(String  foldr_path);
27
-    public native  int  mygpfilenewfromfd(String  file_path);
28
-    public native  int  mygpcamerafileget(String  foldr_path, String file_name);
29
-    public native  int  mygpfilefree();
30 27
 
31 28
 }

+ 1 - 5
app/src/main/java/ai/pai/lensman/service/UploadTask.java

@@ -28,11 +28,7 @@ public class UploadTask extends AsyncTask<Void, Integer, Boolean> {
28 28
     protected Boolean doInBackground(Void... params) {
29 29
         for(int k = 0 ; k< 3;k++){
30 30
             try {
31
-                String dirPath = ai.pai.lensman.utils.Constants.APP_IMAGE_DIR + File.separator + bean.sessionId
32
-                        + File.separator + ai.pai.lensman.utils.Constants.THUMBNAIL_DIR_NAME;
33
-                File dir = new File(dirPath);
34
-                dir.mkdirs();
35
-                File photo = new File(dir, bean.photoName);
31
+                File photo = new File(bean.photoPath);
36 32
                 LogHelper.d(TAG, "上传照片 第"+k+"次尝试"+ bean);
37 33
                 if (photo.exists() && photo.isFile()) {
38 34
                     PhotoUploadUtils photoUploadUtils = new PhotoUploadUtils(UrlContainer.PHOTO_UPLOAD_URL + "?timestamp=" + System.currentTimeMillis());

+ 1 - 3
app/src/main/java/ai/pai/lensman/session/PhotoRecyclerAdapter.java

@@ -81,9 +81,7 @@ public class PhotoRecyclerAdapter extends RecyclerView.Adapter<PhotoRecyclerAdap
81 81
             return;
82 82
         }
83 83
         final PhotoBean item = photoList.get(position);
84
-        String path =  Constants.APP_IMAGE_DIR + File.separator+item.sessionId+File.separator
85
-                +Constants.THUMBNAIL_DIR_NAME+File.separator+item.photoName;
86
-        ImageLoaderUtils.displayLocalImage(path, holder.photo, options);
84
+        ImageLoaderUtils.displayLocalImage(item.photoPath, holder.photo, options);
87 85
         int height = width*10/16;
88 86
         ViewGroup.LayoutParams lp=holder.photo.getLayoutParams();
89 87
         lp.width = width;

+ 78 - 53
app/src/main/java/ai/pai/lensman/session/SessionInteractor.java

@@ -1,30 +1,34 @@
1 1
 package ai.pai.lensman.session;
2 2
 
3
-import android.widget.Toast;
3
+import android.os.Handler;
4
+import android.os.Handler.Callback;
5
+import android.os.Message;
6
+import android.text.TextUtils;
4 7
 
5 8
 import com.android.common.utils.LogHelper;
6 9
 
7
-import java.util.ArrayList;
10
+import java.io.File;
8 11
 import java.util.Timer;
9 12
 import java.util.TimerTask;
10 13
 
11
-import ai.pai.lensman.App;
12
-import ai.pai.lensman.BuildConfig;
13 14
 import ai.pai.lensman.bean.PhotoBean;
14 15
 import ai.pai.lensman.bean.SessionBean;
15
-import ai.pai.lensman.db.DBService;
16 16
 import ai.pai.lensman.dslr.CameraJNIInterface;
17
+import ai.pai.lensman.service.Constants;
17 18
 
18
-public class SessionInteractor {
19
+public class SessionInteractor implements Callback{
19 20
 
21
+    private Timer photoCaptureTimer;
20 22
     private SessionBean sessionBean;
21
-    private Timer timer;
22 23
     private SessionListener listener;
24
+    private String sessionWorkingDirPath;
23 25
 
24
-    private long maxId = 0;
25 26
     private boolean isWorking;
26 27
     private boolean isLastQueryReturned = true;
27 28
 
29
+    private Handler cameraInitHandler;
30
+    private static final int MSG_CAMERA_INIT_EVENT = 1001;
31
+
28 32
     private static final String TAG = "SessionInteractor";
29 33
 
30 34
     public SessionInteractor(SessionBean sessionBean, SessionListener listener) {
@@ -32,6 +36,21 @@ public class SessionInteractor {
32 36
         this.sessionBean = sessionBean;
33 37
     }
34 38
 
39
+    @Override
40
+    public boolean handleMessage(Message message) {
41
+        if(message.what==MSG_CAMERA_INIT_EVENT){
42
+            int result = CameraJNIInterface.getInstance().mygpcamerainit();
43
+            if(result>=0){
44
+                listener.onSessionStartSuccess(sessionBean.sessionId);
45
+                isWorking = true;
46
+                startCapture();
47
+            }else{
48
+                cameraInitHandler.sendEmptyMessageDelayed(MSG_CAMERA_INIT_EVENT,1000);
49
+            }
50
+        }
51
+        return false;
52
+    }
53
+
35 54
     public interface SessionListener {
36 55
         void onSessionStartSuccess(String session);
37 56
         void onSessionStartError(String session);
@@ -41,41 +60,40 @@ public class SessionInteractor {
41 60
 
42 61
     public void startSession(){
43 62
         LogHelper.d(TAG,"startSession");
63
+        sessionWorkingDirPath = Constants.APP_IMAGE_DIR + File.separator + sessionBean.sessionId
64
+                + File.separator + ai.pai.lensman.utils.Constants.ORIGIN_DIR_NAME;
65
+       new File(sessionWorkingDirPath).mkdirs();
44 66
 
45
-        ArrayList<PhotoBean> photoList = DBService.getInstance().getPhotoListBySessionId(sessionBean.sessionId);
46
-        if(photoList!=null && photoList.size()>0){
47
-            for(PhotoBean photoBean : photoList){
48
-                if(photoBean.photoId>maxId){
49
-                    maxId = photoBean.photoId;
50
-                }
67
+        int result = CameraJNIInterface.getInstance().mygpcamerainit();
68
+        if(result>=0){
69
+            listener.onSessionStartSuccess(sessionBean.sessionId);
70
+            isWorking = true;
71
+            startCapture();
72
+        }else{
73
+            if(cameraInitHandler!=null){
74
+                cameraInitHandler.removeCallbacksAndMessages(null);
75
+                cameraInitHandler = null;
51 76
             }
77
+            cameraInitHandler = new Handler(this);
78
+            cameraInitHandler.sendEmptyMessageDelayed(MSG_CAMERA_INIT_EVENT,1000);
79
+            listener.onSessionStartError(sessionBean.sessionId);
52 80
         }
53 81
 
54
-        listener.onSessionStartSuccess(sessionBean.sessionId);
55
-        isWorking = true;
56
-        startCapture();
57
-
58 82
         LogHelper.d(TAG,"startSession sessionStartTask execute");
59 83
     }
60 84
 
61 85
     public void startCapture() {
62
-        int result = CameraJNIInterface.getInstance().mygpcamerainit();
63
-        if(result>=0){
64
-            LogHelper.d(TAG,"相机信息--->\n"+CameraJNIInterface.getInstance().mygpcameragetsummary());
65
-            Toast.makeText(App.getAppContext(),CameraJNIInterface.getInstance().mygpcameragetsummary(),Toast.LENGTH_SHORT).show();
66
-
86
+        if(photoCaptureTimer !=null){
87
+            photoCaptureTimer.cancel();
88
+            photoCaptureTimer = null;
67 89
         }
68
-        if(timer!=null){
69
-            timer.cancel();
70
-            timer = null;
71
-        }
72
-        timer = new Timer();
73
-        timer.schedule(new TimerTask() {
90
+        photoCaptureTimer = new Timer();
91
+        photoCaptureTimer.schedule(new TimerTask() {
74 92
             @Override
75 93
             public void run() {
76 94
                 fetchPhotoTask();
77 95
             }
78
-        },5000,1000);
96
+        },2000,1000);
79 97
     }
80 98
 
81 99
     private void fetchPhotoTask(){
@@ -87,43 +105,50 @@ public class SessionInteractor {
87 105
             return;
88 106
         }
89 107
 
90
-        if(BuildConfig.isTestMode){
91
-            PhotoBean bean = new PhotoBean();
92
-            long milisec = System.currentTimeMillis();
93
-            bean.photoName = milisec+".jpg";
94
-            bean.photoId = milisec;
95
-
96
-            bean.captureTime = bean.photoId;
97
-            bean.isRawPhoto = false;
98
-            bean.uploadStatus = PhotoBean.UploadStatus.STATUS_NO_BEGIN;
99
-            bean.sessionId = sessionBean.sessionId;
100
-            bean.lensmanId = sessionBean.lensmanId;
101
-            bean.sessionSeq = sessionBean.sessionSeq;
102
-            bean.sessionDate = sessionBean.sessionDate;
103
-            bean.sessionCreateTime = sessionBean.createTime;
104
-            //TODO
105
-            return;
108
+        isLastQueryReturned = false;
109
+        String photoName = CameraJNIInterface.getInstance().mygpcamerawaitforevent(sessionWorkingDirPath);
110
+        if(photoName!=null && photoName.length()>0){
111
+            String sub = photoName.substring(0,1);
112
+            if(TextUtils.isDigitsOnly(sub)){
113
+                LogHelper.d(TAG,"fetchPhotoTask new photo found");
114
+                PhotoBean bean = new PhotoBean();
115
+                bean.photoName = photoName;
116
+                bean.photoId = Long.parseLong(photoName.substring(0,photoName.lastIndexOf(".")));
117
+                bean.captureTime = bean.photoId;
118
+                bean.isRawPhoto = true;
119
+                bean.uploadStatus = PhotoBean.UploadStatus.STATUS_NO_BEGIN;
120
+                bean.sessionId = sessionBean.sessionId;
121
+                bean.lensmanId = sessionBean.lensmanId;
122
+                bean.sessionSeq = sessionBean.sessionSeq;
123
+                bean.sessionDate = sessionBean.sessionDate;
124
+                bean.sessionCreateTime = sessionBean.createTime;
125
+                bean.photoPath = Constants.APP_IMAGE_DIR+File.separator+photoName;
126
+                listener.onSessionPhotoCaptured(bean);
127
+            }
106 128
         }
107 129
 
108
-        isLastQueryReturned = false;
109
-        LogHelper.d(TAG,"fetchPhotoTask starts");
130
+        isLastQueryReturned = true;
110 131
     }
111 132
 
112 133
 
113 134
 
114 135
     public void endSession(){
115 136
         isWorking = false;
116
-        if(timer!=null){
117
-            timer.cancel();
118
-            timer = null;
137
+        if(photoCaptureTimer !=null){
138
+            photoCaptureTimer.cancel();
139
+            photoCaptureTimer = null;
119 140
         }
120
-        //TODO
141
+        CameraJNIInterface.getInstance().mygpcameraexit();
121 142
         listener.onSessionEnd(sessionBean.sessionId);
143
+        if(cameraInitHandler!=null){
144
+            cameraInitHandler.removeCallbacksAndMessages(null);
145
+            cameraInitHandler = null;
146
+        }
122 147
     }
123 148
 
124 149
     public void deletePhoto(PhotoBean photoBean){
125
-        //TODO
126 150
         LogHelper.d(TAG,"deletePhoto execute "+photoBean);
151
+        new File(photoBean.photoPath).delete();
127 152
     }
128 153
 
129 154
 }

+ 3 - 2
app/src/main/java/ai/pai/lensman/session/SessionPresenter.java

@@ -10,6 +10,7 @@ import java.util.TimerTask;
10 10
 
11 11
 import ai.pai.lensman.App;
12 12
 import ai.pai.lensman.BuildConfig;
13
+import ai.pai.lensman.R;
13 14
 import ai.pai.lensman.bean.PhotoBean;
14 15
 import ai.pai.lensman.bean.SessionBean;
15 16
 import ai.pai.lensman.db.DBService;
@@ -72,13 +73,13 @@ public class SessionPresenter implements SessionContract.Presenter, SessionInter
72 73
 
73 74
     @Override
74 75
     public void onSessionStartSuccess(String session) {
75
-        sessionView.showToast("session启动成功");
76
+        sessionView.showToast(App.getAppContext().getString(R.string.session_start_success));
76 77
         LogHelper.d(TAG,"onSessionStartSuccess session启动成功"+session);
77 78
     }
78 79
 
79 80
     @Override
80 81
     public void onSessionStartError(String session) {
81
-        sessionView.showToast("session启动失败");
82
+        sessionView.showToast(App.getAppContext().getString(R.string.session_start_success));
82 83
     }
83 84
 
84 85
     @Override

+ 4 - 0
app/src/main/res/values/strings.xml

@@ -134,4 +134,8 @@
134 134
 
135 135
     <string name="check_box_time">请检查手机时间设置是否正确</string>
136 136
 
137
+    <string name="session_start_success">拍摄启动成功</string>
138
+
139
+    <string name="session_start_error">拍摄启动失败,请检查相机及连接线</string>
140
+
137 141
 </resources>